#!/usr/bin/env node

/**
 * 添加新的admin用户脚本
 * 
 * 使用方法：
 * node scripts/add_admin.js
 * 
 * 功能：
 * 1. 添加一个新的admin用户，账号：admin，密码：admin321
 * 2. 自动检查用户名是否已存在
 * 3. 密码将使用bcryptjs进行哈希加密
 * 4. 创建的管理员默认为超级管理员权限
 */

const bcrypt = require('bcryptjs');
const { query, testConnection } = require('../config/db');

async function addAdmin() {
  // 预设的用户名和密码
  const username = 'admin';
  const password = 'admin321';

  try {
    console.log('🔄 正在连接数据库...');
    
    // 测试数据库连接
    const isConnected = await testConnection();
    if (!isConnected) {
      console.error('❌ 数据库连接失败，请检查配置');
      process.exit(1);
    }

    console.log('🔄 正在检查用户名是否已存在...');
    
    // 检查用户名是否已存在
    const existingAdmin = await query(
      'SELECT id FROM admins WHERE username = ?',
      [username]
    );

    if (existingAdmin.length > 0) {
      console.error(`❌ 用户名 "${username}" 已存在，请使用其他用户名`);
      process.exit(1);
    }

    console.log('🔄 正在加密密码...');
    
    // 使用bcryptjs加密密码
    const saltRounds = 12; // 加密强度
    const passwordHash = await bcrypt.hash(password, saltRounds);

    console.log('🔄 正在创建管理员...');
    
    // 插入管理员记录
    const result = await query(
      `INSERT INTO admins (username, password_hash, is_super_admin, is_active) 
       VALUES (?, ?, 1, 1)`,
      [username, passwordHash]
    );

    if (result.affectedRows === 1) {
      console.log('✅ 管理员创建成功！');
      console.log(`   用户名: ${username}`);
      console.log(`   密码: ${password}`);
      console.log(`   管理员ID: ${result.insertId}`);
      console.log(`   创建时间: ${new Date().toLocaleString()}`);
      console.log('');
      console.log('🔐 请妥善保管登录凭据，建议首次登录后立即修改密码');
    } else {
      console.error('❌ 创建管理员失败');
      process.exit(1);
    }

  } catch (error) {
    console.error('❌ 创建过程中发生错误:', error.message);
    process.exit(1);
  } finally {
    // 退出进程
    process.exit(0);
  }
}

// 执行创建函数
addAdmin();